View Javadoc
1   package edu.jiangxin.apktoolbox.help.settings;
2   
3   import edu.jiangxin.apktoolbox.swing.extend.EasyChildTabbedPanel;
4   import edu.jiangxin.apktoolbox.utils.Constants;
5   
6   import javax.swing.*;
7   import java.awt.*;
8   import java.io.File;
9   import java.io.IOException;
10  import java.net.URI;
11  import java.net.URISyntaxException;
12  
13  public class DependencyPathPanel extends EasyChildTabbedPanel {
14  
15      private static final long serialVersionUID = 1L;
16  
17      @Override
18      public void createUI() {
19          BoxLayout boxLayout = new BoxLayout(this, BoxLayout.Y_AXIS);
20          setLayout(boxLayout);
21  
22          createPathPanel(this, "Path of 7ZIP(e.g.\"C:/Program Files/7-Zip/7z.exe\")", "https://www.7-zip.org/", Constants.SEVEN_ZIP_PATH_KEY);
23          add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
24  
25          createPathPanel(this, "Path of RAR(e.g.\"C:/Program Files/WinRAR/Rar.exe\")", "https://www.win-rar.com/", Constants.RAR_PATH_KEY);
26          add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
27  
28          createPathPanel(this, "Path of RAR(e.g.\"C:/Program Files/WinRAR/WinRAR.exe\")", "https://www.win-rar.com/", Constants.WIN_RAR_PATH_KEY);
29      }
30  
31      private void createPathPanel(JPanel panel, String label, String website, String confKey) {
32          JPanel pathPanel = new JPanel();
33          pathPanel.setLayout(new BoxLayout(pathPanel, BoxLayout.Y_AXIS));
34          panel.add(pathPanel);
35  
36          JPanel firstLinePanel = new JPanel();
37          firstLinePanel.setLayout(new BoxLayout(firstLinePanel, BoxLayout.X_AXIS));
38  
39          JLabel pathLabel = new JLabel(label);
40  
41          JButton visitWebsiteButton = new JButton(bundle.getString("download.button"));
42  
43          firstLinePanel.add(pathLabel);
44          firstLinePanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
45          firstLinePanel.add(visitWebsiteButton);
46          firstLinePanel.add(Box.createHorizontalGlue());
47  
48          JPanel secondLinePanel = new JPanel();
49          secondLinePanel.setLayout(new BoxLayout(secondLinePanel, BoxLayout.X_AXIS));
50  
51          JTextField pathTextField = new JTextField();
52          pathTextField.setText(conf.getString(confKey));
53  
54          JButton pathButton = new JButton(bundle.getString("choose.file.button"));
55  
56          secondLinePanel.add(pathTextField);
57          secondLinePanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
58          secondLinePanel.add(pathButton);
59  
60          pathPanel.add(firstLinePanel);
61          pathPanel.add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
62          pathPanel.add(secondLinePanel);
63  
64  
65          visitWebsiteButton.addActionListener(e -> {
66              URI uri;
67              try {
68                  uri = new URI(website);
69                  Desktop.getDesktop().browse(uri);
70              } catch (URISyntaxException ex) {
71                  logger.error("URISyntaxException", ex);
72              } catch (IOException ex) {
73                  logger.error("IOException", ex);
74              }
75          });
76  
77          pathButton.addActionListener(e -> {
78              JFileChooser jfc = new JFileChooser();
79              jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
80              jfc.setDialogTitle("select a file");
81              int ret = jfc.showDialog(new JLabel(), null);
82              if (ret == JFileChooser.APPROVE_OPTION) {
83                  File file = jfc.getSelectedFile();
84                  pathTextField.setText(file.getAbsolutePath());
85                  conf.setProperty(confKey, pathTextField.getText());
86              }
87          });
88      }
89  }
90